home *** CD-ROM | disk | FTP | other *** search
-
- *WHILE LOOP MACRO
- *USES: AC AND LET MACRO
- *
- * WHILE COND
- * [CONDITION COMP IN AC]
- * DO
- * [LOOP BODY-DONE IF AC TEST IS TRUE]
- * NEXT
- *OR:
- * WHILE COND,<LET EXPR>
- * DO
- * [LOOP BODY-DONE IF <LET EXPR> TEST IS TRUE]
- * NEXT
-
- COPY MACROS.NEXT
- COPY MACROS.DO
-
- WHILE $MACRO C,EE START WHILE CONDITIONAL
- $VAR I,E,Q,W,T
- $ASG '$$LPS' TO I.S GET CNTXT VAR
- $ASG I.SV+1 TO I.SV PUSH CNTXT
- $ASG '$$LP' TO Q.S
- $ASG :Q::I.SV: TO I.SS MAKE THIS CNTXT NAME
- $ASG '$$LAB' TO E.S GET UIQUE LABEL
- $ASG E.SV+1 TO E.SV INCR
- $ASG :I.SS: TO W.S MAKE THIS CNTXT
- $ASG E.SV TO W.SV SAVE LABEL IN THIS CNTXT
- $ASG 'EQ' TO T.S
- $IF C.SV=T.SV
- $ASG 'BNZ' TO W.SS
- $ELSE
- $ASG 'NE' TO T.S
- $IF C.SV=T.SV
- $ASG 'BZ' TO W.SS
- $ELSE
- $ASG 'LT' TO T.S
- $IF C.SV=T.SV
- $ASG 'BGEZ' TO W.SS
- $ELSE
- $ASG 'GT' TO T.S
- $IF C.SV=T.SV
- $ASG 'BLEZ' TO W.SS
- $ELSE
- $ASG 'LE' TO T.S
- $IF C.SV=T.SV
- $ASG 'BGZ' TO W.SS
- $ELSE
- $ASG 'GE' TO T.S
- $IF C.SV=T.SV
- $ASG 'BLZ' TO W.SS
- $ELSE
- $ASG :C.S: TO W.SS
- $ENDIF
- $ENDIF
- $ENDIF
- $ENDIF
- $ENDIF
- $ENDIF
- I$:W.SV: EQU $ TOP OF LOOP
- $IF EE.L#=0
- LET :EE: DO LET
- $ENDIF
- $END